package com.karry.web;

import com.karry.pojo.Type;
import com.karry.pojo.User;
import com.karry.service.TypeService;
import com.karry.service.impl.TypeServiceImpl;
import com.karry.util.JsonUtil;
import com.karry.util.XssStrUtils;
import com.karry.vo.ResultInfo;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

@WebServlet("/type")
public class TypeServlet extends HttpServlet {

    TypeService ts = new TypeServiceImpl();

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // 设置首页导航的高亮值
        req.setAttribute("menu_page", "type");
        String method = req.getParameter("actionName").trim();

        System.out.println("type_actionName:" + method);

        switch (method){
            //查询类型列表
            case "list":
                typeList(req, resp);
                break;
                //删除类型
            case "delete":
                deleteType(req, resp);
                break;
                //添加或者修改类型
            case "addOrUpdate":
                addOrUpdate(req, resp);
                break;
                //管理员删除，没设计好
            case "delete2":
                deleteType1(req, resp);
                break;
            case "live":
                liveType(req, resp);
                break;
            default:
                break;
        }


    }

    private void liveType(HttpServletRequest req, HttpServletResponse resp) {

        String typeID = req.getParameter("id");
        int id = 0;
        if (typeID != null && typeID.length() > 0){
            id = Integer.parseInt(typeID);
            System.out.println("id:" + id);
        }

        ResultInfo<Integer> resultInfo = ts.liveType(id, req);
        JsonUtil.toJson(resp, resultInfo);
    }

    private void deleteType1(HttpServletRequest req, HttpServletResponse resp) {

        String typeID = req.getParameter("id");
        int id = 0;
        if (typeID != null && typeID.length() > 0){
            id = Integer.parseInt(typeID);
            System.out.println("id:" + id);
        }
        ResultInfo<Integer> resultInfo = ts.deleteType1(id, req);
        JsonUtil.toJson(resp, resultInfo);
    }

    /**
     * 添加或修改类型
     1. 接收参数 （类型名称、类型ID）
     2. 获取Session作用域中的user对象，得到用户ID
     3. 调用Service层的更新方法，返回ResultInfo对象
     4. 将ResultInfo转换成JSON格式的字符串，响应给ajax的回调函数
     * @param request
     * @param response
     */
    private void addOrUpdate(HttpServletRequest request, HttpServletResponse response) {
        // 1. 接收参数 （类型名称、类型ID）
        String typeName = request.getParameter("typeName").trim();

        //防止xss注入
        typeName = XssStrUtils.replaceHtmlCode(typeName);

        String typeId = request.getParameter("typeId");
        // 2. 获取Session作用域中的user对象，得到用户ID
        User user = (User) request.getSession().getAttribute("user");
        // 3. 调用Service层的更新方法，返回ResultInfo对象
        ResultInfo<Integer> resultInfo = ts.addOrUpdate(typeName, user.getId(), typeId);
        // 4. 将ResultInfo转换成JSON格式的字符串，响应给ajax的回调函数
        JsonUtil.toJson(response, resultInfo);
    }

    /**
     * 删除类型
     1. 接收参数（类型ID）
     2. 调用Service的更新操作，返回ResultInfo对象
     3. 将ResultInfo对象转换成JSON格式的字符串，响应给ajax的回调函数
     * @param request
     * @param response
     */
    private void deleteType(HttpServletRequest request, HttpServletResponse response) {
        // 1. 接收参数（类型ID）
        String typeId = request.getParameter("typeId");
        // 2. 调用Service的更新操作，返回ResultInfo对象
        ResultInfo<Type> resultInfo = ts.deleteType(typeId);
        // 3. 将ResultInfo对象转换成JSON格式的字符串，响应给ajax的回调函数
        JsonUtil.toJson(response, resultInfo);
    }


    /**
     * 查询类型列表
     1. 获取Session作用域设置的user对象
     2. 调用Service层的查询方法，查询当前登录用户的类型集合，返回集合
     3. 将类型列表设置到request请求域中
     4. 设置首页动态包含的页面值
     5. 请求转发跳转到index.jsp页面
     * @param request
     * @param response
     */
    private void typeList(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1. 获取Session作用域设置的user对象
        User user = (User) request.getSession().getAttribute("user");
        // 2. 调用Service层的查询方法，查询当前登录用户的类型集合，返回集合
        List<Type> typeList = ts.findTypeList(user.getId());
        // 3. 将类型列表设置到request请求域中
        request.setAttribute("typeList", typeList);
        System.out.println(typeList);
        // 4. 设置首页动态包含的页面值
        request.setAttribute("changePage","type/list.jsp");
        // 5. 请求转发跳转到index.jsp页面
        request.getRequestDispatcher("index.jsp").forward(request, response);
    }
}
